package view.colorant;

import java.util.ArrayList;

import carte.Cellule;

public class MultiColorant extends Colorant {

	private ArrayList<Colorant> liste;

	public MultiColorant() {
		this.liste = new ArrayList<Colorant>();
	}

	public void add(Colorant col) {
		synchronized (liste) {
			liste.add(col);
		}
	}

	public void remove(Colorant col) {
		synchronized (liste) {
			liste.remove(col);
		}
	}

	@Override
	public int getRed(Cellule c) {
		int red = 0, size = 0;
		synchronized (liste) {
			for (Colorant col : liste) {
				if (col.getRed(c) != -1) {
					red += col.getRed(c);
					size++;
				}
			}
		}
		if (size == 0)
			return 0;
		return red / size;
	}

	@Override
	public int getBlue(Cellule c) {
		int blue = 0, size = 0;
		synchronized (liste) {
			for (Colorant col : liste) {
				if (col.getBlue(c) != -1) {
					blue += col.getBlue(c);
					size++;
				}
			}
		}
		if (size == 0)
			return 0;
		return blue / size;
	}

	@Override
	public int getGreen(Cellule c) {
		int green = 0, size = 0;
		synchronized (liste) {
			for (Colorant col : liste) {
				if (col.getGreen(c) != -1) {
					green += col.getGreen(c);
					size++;
				}
			}
		}
		if (size == 0)
			return 0;
		return green / size;
	}

	public void set(Colorant colorant, boolean state) {
		synchronized (liste) {
			if (state)
				liste.add(colorant);
			else
				liste.remove(colorant);
		}
	}

}
